\chapter{Спецификация требований программного средства}

В данном разделе приведено краткое описание поведения разработанной программы. Оно похоже на стандартный документ Software Requirements Specification (SRS), но не преследует цели соответствовать стандартам подобного рода документации, а скорее размещено для лучшего понимания нашего видения работы системы. Далее приведены внешнее описание, функциональные требования и требования к качеству.

\section{Внешнее описание}

Приведём описание места разработанной системы в предметной области на естественном языке. В соответствии с техническим заданием, требуется создать программное средство для членов университетских комиссий, занимающихся распределением денежных пособий. При проектировании прежде всего следует ориентироваться на удобство и эффективность их работы.

Для реализации функций членов комиссии требуется собирать в базу данных информацию по всем студентам университета, по сессиям, экзаменам, которые сдавали студенты. Это нужно, чтобы отслеживать специфические академические категории студентов, варьирующиеся в зависимости от оценок, на которые студент закрыл последнюю сессию, если, конечно, ему вообще удалось это сделать.

В этой связи, студентам, вероятно, тоже имеет смысл предоставить ограниченный доступ к системе для проверки своей успеваемости, написания заявлений на материальную помощь, просмотра расписаний экзаменов и прочего. Кроме того, студенты часто входят в факультетскую комиссию, распределяющую социальные пособия. Чтобы обеспечить разделение ролей пользователей, целесообразно использоать стандартную схему с авторизацией и проверкой прав.

\section{Функциональная спецификация}

Как уже было выявлено на этапе внешнего описания, пользователи системы должны подразделяться на роли по способам взаимодействия с разрабатываемой программой. Различные пользователи могут преследовать разные цели, обращаясь к программному средству. Выделим основных участников прецедентов взаимодействия с системой:

\begin{enumerate}
\item \textbf{Гость}~--- неавторизованный пользователь, использующий систему. Авторизованные пользователи также имеют возможность использовать функциональность гостя.
\item \textbf{Студент}~--- лицо, обучающееся в университете. Может получать стипендии и пособия.
\item \textbf{Член факультетской комиссии}~--- лицо, входящее в состав подразделения, выносящего решения о начислении разовых социальных пособий.
\item \textbf{Член стипендиальной комиссии}~--- лицо, входящее в состав подразделения, выносящего решения о начислении ежемесячных стипендий.
\item \textbf{Администратор}~--- специалист, управляющий системой.
\end{enumerate}

Эти участники являются группами пользователей системы. Иными словами, один и тот же пользователь может играть одновременно несколько подобных ролей. Поддержка видоизменения интерфейса системы в зависимости от пользователя требует использования системы аутентификации и авторизации.

\subsection{Функциональность гостя}

\begin{enumerate}
\item Просмотр списка студентов университета по группе.
\item Просмотр списка факультетов университета.
\item Просмотр списка специальностей.
\item Просмотр списка сессий.
\item Просмотр списка экзаменов и зачётов.
\end{enumerate}

\subsection{Функциональность студента}

\begin{enumerate}
\item Просмотр информации о назначенных или когда-либо назначавшихся этому студенту стипендиях.
\item Просмотр информации об успеваемости любого студента.
\item Просмотр результатов сессии для студентов заданной группы.
\item Подача заявлений на матпомощь.
\end{enumerate}

\subsection{Функциональность члена факультетской комиссии}

\begin{enumerate}
\item Просмотр текущего состояния ФСЗ и истории его изменения.
\item Просмотр информации по всем пособиям, когда либо назначавшимся.
\item Просмотр информации об успеваемости любого студента.
\item Просмотр результатов сессии для студентов заданной группы.
\item Назначение разового пособия конкретному студенту.
\item Система отслеживает и пресекает попытки нарушения следующих ограничений:
	\begin{enumerate}
	\item Попытка перерасхода средств ФСЗ.
    \item Попытка расхода на материальную помощь больше 25~\% ФСЗ.
    \item Попытка выдачи социального пособия студенту, не сдавшему последнюю сессию.
    \item Попытка выдачи социального пособия студенту-контрактнику.
    \item Попытка выдачи социального пособия по двум заявлениям одному студенту.
    \item Попытка выдачи двух социальных пособий одному студенту в один месяц.
	\item Другие попытки выдачи социальных пособий, сочтённые некорректными в процессе работы с системой.
	\end{enumerate}
\end{enumerate}

\subsection{Функциональность члена стипендиальной комиссии}

\begin{enumerate}
\item Просмотр текущего состояния ФСЗ и истории его изменения.
\item Просмотр информации о когда-либо назначавшихся стипендиях.
\item Просмотр сведений о студентах, получающих стипендию в указанном семестре с указанием её размеров.
\item Просмотр информации об успеваемости любого студента.
\item Просмотр результатов сессии для студентов заданной группы.
\item Назначение ежемесячной стипендии конкретному студенту.
\item Система отслеживает и пресекает попытки нарушения следующих ограничений:
	\begin{enumerate}
	\item Попытка перерасхода средств ФСЗ.
    \item Попытка расхода на стипендии больше 75~\% ФСЗ.
    \item Попытка выдачи стипендии студенту, не сдавшему последнюю сессию.
    \item Попытка выдачи стипендии студенту-контрактнику;
	\item Другие попытки выдачи стипендии, сочтённые некорректными в процессе работы с системой.
	\end{enumerate}
\end{enumerate}

\subsection{Функциональность администратора}

\begin{enumerate}
\item Работа с любыми данными в базе:
	\begin{enumerate}
    \item Создание новых записей в любой таблице.
    \item Удаление записей из любой таблицы.
    \item Изменение записей в любой таблице.
    \item Просмотр содержимого любой таблицы.
	\end{enumerate}
\item Настройка системы по требованию пользователей.
\item Обеспечение стабильной работы системы.
\item Поддержка системы, сопровождение работы пользователей.
\end{enumerate}

В целом, права администратора можно вообще не проверять и разрешить ему выполнять все действия, для выполнения которых требуется проверка прав.

\section{Требования к качеству}

Нужно отметить, что обеспечение качества приложения не является приоритетной задачей данного курсового проекта. Тем не менее, следуя внешнему описанию и техническому заданию, можно выделить два основных требования к качеству:
\begin{enumerate}
\item \textbf{Безопасность}. Система должна строго контролировать действия пользователей в соответствии с их ролями и не допускать несанкционированный доступ к базе данных.
\item \textbf{Дружественный интерфейс}. Система должна обеспечить удобный интерфейс членам комиссий с диалоговым режимом назначения стипендий студентам определённх категорий.
\end{enumerate}

Первое требование обусловлено связью приложения с финансовыми вопросами, которые безусловно требуют повышенного внимания к безопасности. Второе требование вызвано сложностями внедрения подобных программных средств в государственных учреждениях со сложившейся структурой, вроде университетов.
